From ea3d0fee23a5a6dc23565a442b28a590f298c393 Mon Sep 17 00:00:00 2001 From: "\"Gianni Tedesco (3P)\"" Date: Wed, 11 Aug 2010 13:09:03 +0100 Subject: [PATCH] xl: Fix invalid return of internal ptrs via libxl_poolid_to_name libxl_poolid_to_name has in-and-out-of-library callers. In library callers now use _libxl_poolid_to_name() which participates in garbage collection and out-of-library callers are fixed up to free() the domain name. Signed-off-by: Gianni Tedesco Signed-off-by: Stefano Stabellini --- tools/libxl/libxl_internal.h | 1 + tools/libxl/libxl_utils.c | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 2b2d9635bc..61b3a46266 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -228,6 +228,7 @@ char *libxl_abs_path(libxl_ctx *ctx, char *s, const char *path); #define XL_LOG_ERROR XTL_ERROR char *_libxl_domid_to_name(libxl_ctx *ctx, uint32_t domid); +char *_libxl_poolid_to_name(libxl_ctx *ctx, uint32_t poolid); #endif diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c index 7fe10396fc..a0cfcca1c8 100644 --- a/tools/libxl/libxl_utils.c +++ b/tools/libxl/libxl_utils.c @@ -98,7 +98,14 @@ char *libxl_poolid_to_name(libxl_ctx *ctx, uint32_t poolid) return "Pool-0"; snprintf(path, sizeof(path), "/local/pool/%d/name", poolid); s = xs_read(ctx->xsh, XBT_NULL, path, &len); - libxl_ptr_add(ctx, s); + return s; +} + +char *_libxl_poolid_to_name(libxl_ctx *ctx, uint32_t poolid) +{ + char *s = libxl_poolid_to_name(ctx, poolid); + if ( s ) + libxl_ptr_add(ctx, s); return s; } @@ -115,7 +122,7 @@ int libxl_name_to_poolid(libxl_ctx *ctx, const char *name, return ERROR_NOMEM; for (i = 0; i < nb_pools; i++) { - poolname = libxl_poolid_to_name(ctx, poolinfo[i].poolid); + poolname = _libxl_poolid_to_name(ctx, poolinfo[i].poolid); if (!poolname) continue; if (strcmp(poolname, name) == 0) { -- 2.30.2